<?php

namespace UFSW\DataBaseBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Usuario
 *
 * @ORM\Table(name="usuario")
 * @ORM\Entity(repositoryClass="UFSW\DataBaseBundle\Entity\UsuarioRepository")
 */
class Usuario implements UserInterface, \Serializable
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="apellido", type="string", length=50, nullable=true)
     */
    private $apellido;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=100)
     * @Assert\NotBlank()
     */
    private $email;

    /**
     * @var integer
     *
     * @ORM\Column(name="identificador", type="integer", nullable=true)
     */
    private $identificador;
    
    /**
     * @var string
     * 
     * @ORM\Column(name="idioma", type="string", length=5, nullable=true)
     */
    private $idioma;
    
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="fecNac", type="date", nullable=true)
     */
    private $fecNac;
    
    /**
     * @var boolean
     *
     * @ORM\Column(name="isActive", type="boolean", nullable=true)
     */
    private $isActive;

    /**
     * @var string
     *
     * @ORM\Column(name="nombre", type="string", length=50)
     * @Assert\NotBlank()
     */
    private $nombre;

    /**
     * @var integer
     *
     * @ORM\Column(name="numIdentificador", type="integer", nullable=true)
     */
    private $numIdentificador;

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=255)
     */
    private $password;

    /**
     * @var string
     *
     * @ORM\Column(name="salt", type="string", length=255, nullable=true)
     */
    private $salt;
    
    /** 
     * @ORM\Column(type="string", length=100) 
     */
    private $slug;

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=50)
     */
    private $username;

    /**
     * @ORM\ManyToOne(targetEntity="UFSW\DataBaseBundle\Entity\Pais")
     * @ORM\JoinColumn(name="nacionalidad", referencedColumnName="id")
     */
    private $nacionalidad;

    /**
     * @ORM\ManyToOne(targetEntity="UFSW\DataBaseBundle\Entity\Pais")
     * @ORM\JoinColumn(name="residencia", referencedColumnName="id")
     */
    private $paisResidencia;

    /**
     * @ORM\ManyToOne(targetEntity="UFSW\DataBaseBundle\Entity\Pais")
     * @ORM\JoinColumn(name="ident_pais", referencedColumnName="id")
     */
    private $paisIdentificador;

    /**
     * @ORM\ManyToOne(targetEntity="UFSW\DataBaseBundle\Entity\Provincia")
     * @ORM\JoinColumn(name="provincia_id", referencedColumnName="id")
     */
    private $provincia;

    /**
     * @ORM\ManyToOne(targetEntity="UFSW\DataBaseBundle\Entity\Ciudad")
     * @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id")
     */
    private $ciudad;
    
    /**
     * @ORM\oneToMany(targetEntity="UFSW\DataBaseBundle\Entity\Torneo", mappedBy="usuario")
     */
    private $torneos;
    
    public function __construct() { 
        $this->isActive = true; 
        $this->torneos = new ArrayCollection();
    }
    
    /** 
     * @inheritDoc
     */ 
    public function getUsername()
    {
        return $this->username;
    }
    
    
    /**
     * @inheritDoc 
     */ 
    public function getPassword() 
    { 
        return $this->password;
    }
    /**
     * @inheritDoc 
     */ 
    public function getRoles() 
    { 
        return array('ROLE_USER');
    }
    
//    public function getRoles()
//    {
//    	return $this->roles->toArray();
//    }
    /**
     * @inheritDoc
     */ 
    public function eraseCredentials() 
    {
    }
    
    /**
     * @see \Serializable::serialize()
     */
    public function serialize()
    {
        return serialize(array(
            $this->id,
        ));
    }

    /**
     * @see \Serializable::unserialize()
     */
    public function unserialize($serialized)
    {
        list (
            $this->id,
        ) = unserialize($serialized);
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set apellido
     *
     * @param string $apellido
     * @return Usuario
     */
    public function setApellido($apellido)
    {
        $this->apellido = $apellido;

        return $this;
    }

    /**
     * Get apellido
     *
     * @return string 
     */
    public function getApellido()
    {
        return $this->apellido;
    }

    /**
     * Set email
     *
     * @param string $email
     * @return Usuario
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

    /**
     * Get email
     *
     * @return string 
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Set identificador
     *
     * @param integer $identificador
     * @return Usuario
     */
    public function setIdentificador($identificador)
    {
        $this->identificador = $identificador;

        return $this;
    }

    /**
     * Get identificador
     *
     * @return integer 
     */
    public function getIdentificador()
    {
        return $this->identificador;
    }
    
    /**
     * Set idioma
     *
     * @param string $idioma
     * @return Usuario
     */
    public function setIdioma($idioma)
    {
        $this->idioma = $idioma;

        return $this;
    }

    /**
     * Get idioma
     *
     * @return string 
     */
    public function getIdioma()
    {
        return $this->idioma;
    }
//
//    /**
//     * Set isActive
//     *
//     * @param boolean $isActive
//     * @return Usuario
//     */
//    public function setIsActive($isActive)
//    {
//        $this->isActive = $isActive;
//
//        return $this;
//    }

//    /**
//     * Get isActive
//     *
//     * @return boolean 
//     */
//    public function getIsActive()
//    {
//        return $this->isActive;
//    }

    /**
     * Set nombre
     *
     * @param string $nombre
     * @return Usuario
     */
    public function setNombre($nombre)
    {
        $this->nombre = $nombre;

        return $this;
    }

    /**
     * Get nombre
     *
     * @return string 
     */
    public function getNombre()
    {
        return $this->nombre;
    }

    /**
     * Set numIdentificador
     *
     * @param integer $numIdentificador
     * @return Usuario
     */
    public function setNumIdentificador($numIdentificador)
    {
        $this->numIdentificador = $numIdentificador;

        return $this;
    }

    /**
     * Get numIdentificador
     *
     * @return integer 
     */
    public function getNumIdentificador()
    {
        return $this->numIdentificador;
    }

    /**
     * Set password
     *
     * @param string $password
     * @return Usuario
     */
    public function setPassword($password)
    {
        $this->password = $password;

        return $this;
    }

    /**
     * Set salt
     *
     * @param string $salt
     * @return Usuario
     */
    public function setSalt($salt)
    {
        $this->salt = $salt;

        return $this;
    }

    /**
     * Get salt
     *
     * @return string 
     */
    public function getSalt()
    {
        return $this->salt;
    }

    /**
     * Set username
     *
     * @param string $username
     * @return Usuario
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Set nacionalidad
     *
     * @param $nacionalidad
     * @return Usuario
     */
    public function setNacionalidad(Pais $nacionalidad)
    {
        $this->nacionalidad = $nacionalidad;

        return $this;
    }

    /**
     * Get nacionalidad
     *
     * @return UFSW\DataBaseBundle\Entity\Pais 
     */
    public function getNacionalidad()
    {
        return $this->nacionalidad;
    }

    /**
     * Set paisResidencia
     *
     * @param $paisResidencia
     * @return Usuario
     */
    public function setPaisResidencia(Pais $paisResidencia)
    {
        $this->paisResidencia = $paisResidencia;

        return $this;
    }

    /**
     * Get paisResidencia
     *
     * @return UFSW\DataBaseBundle\Entity\Pais 
     */
    public function getPaisResidencia()
    {
        return $this->paisResidencia;
    }

    /**
     * Set paisIdentificador
     *
     * @param $paisIdentificador
     * @return Usuario
     */
    public function setPaisIdentificador(Pais $paisIdentificador)
    {
        $this->paisIdentificador = $paisIdentificador;

        return $this;
    }

    /**
     * Get paisIdentificador
     *
     * @return UFSW\DataBaseBundle\Entity\Pais 
     */
    public function getPaisIdentificador()
    {
        return $this->paisIdentificador;
    }

    /**
     * Set provincia
     *
     * @param $provincia
     * @return Usuario
     */
    public function setProvincia(Provincia $provincia)
    {
        $this->provincia = $provincia;

        return $this;
    }

    /**
     * Get provincia
     *
     * @return UFSW\DataBaseBundle\Entity\Provincia 
     */
    public function getProvincia()
    {
        return $this->provincia;
    }

    /**
     * Set ciudad
     *
     * @param $ciudad
     * @return Usuario
     */
    public function setCiudad(Ciudad $ciudad)
    {
        $this->ciudad = $ciudad;

        return $this;
    }

    /**
     * Get ciudad
     *
     * @return UFSW\DataBaseBundle\Entity\Ciudad 
     */
    public function getCiudad()
    {
        return $this->ciudad;
    }
    
    /**
     * Set fecNac
     *
     * @param \DateTime $fecNac
     * @return Usuario
     */
    public function setFecNac($fecNac)
    {
        $this->fecNac = $fecNac;

        return $this;
    }

    /**
     * Get fecNac
     *
     * @return \DateTime 
     */
    public function getFecNac()
    {
        return $this->fecNac;
    }
    
    /**
     * Set Slug
     * 
     * @param string $slug
     */
    public function setSlug($slug)
    {
        $this->slug = $slug;
    }
    
    /**
     * Get Slug
     * 
     * @return string
     */
    public function getSlug()
    {
        return $this->slug;
    }
    
    /**
     * CumpleDatosJugador
     * 
     * @return boolean
     */
    public function cumpleDatosJugador()
    {
        if ($this->numIdentificador != null && $this->identificador != null && $this->fecNac != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public function getFecInteger()
    {
        return date_format($this->fecNac, 'Ymd');
    }
    
    /**
     * Set torneos
     *
     * @param string $torneo
     * @return Usuario
     */
    public function setTorneos($torneo)
    {
        $this->torneos = $torneo;

        return $this;
    }

    /**
     * Get torneos
     *
     * @return ArrayCollection 
     */
    public function getTorneos()
    {
        return $this->torneos;
    }
    
    /**
     * Add torneo
     *
     */
    public function addTorneo(Torneo $torneo)
    {
    
    	$this->torneos->add($torneo);
    }
    
    
    /**
     * Remove torneo
     *
     */
    public function removeTorneo(Torneo $torneo)
    {
    	$this->torneos->removeElement($torneo);
    }
    
    public function __toString()
    {
        return strval($this->slug);
    }
}
